/**
 * 页面控制操作类的插件。
 * 依赖：
 * 1、http://lib.sinaapp.com/js/jquery/1.8.3/jquery.min.js
 */
(function($){
    /**
     * 系统全局命名空间。
     */
    $.yilab = $.yilab || {};
    
    /**
     * 系统默认首页设置和重置的控制器。
     * @param {String} container 控制器容器的ID。
     * @param {String} current 当前页面类的bean id。
     * @param {Boolean} isEntry 是否是系统默认的入口页面类。
     * @param {Boolean} isDefault 是否是网站首页。
     */
    function DefaultController(container, current, isEntry, isDefault){
        this.preferenceKey = "global_default_page";
        this.globalDefaultPage = "pages.globaldefaultpage";
        this.service = "/svr/setPreference.php";
        this.container = $("#" + container);
        this.current = current;
        this.isEntry = isEntry || false;
        this.isDefault = isDefault || false;
        this.initialize();
    }
    DefaultController.prototype = {
        /**
         * 初始化。
         */
        initialize : function(){
            if(!this.isEntry){
                if(this.isDefault){
                    this.createResetHandler();
                }else{
                    this.createSetHandler();
                }
            }
        },
        
        /**
         * 创建设置系统首页的控制元素。
         */
        createSetHandler : function(){
            this.container.html("");
            var handler = $("<a href='#' title='将当前页面设置为登录入口的初始页面'>设为入口</a>");
            handler.click($.proxy(this.setDefault, this));
            this.container.append(handler);
        },
        
        /**
         * 创建重置系统首页的控制元素。
         */
        createResetHandler : function(){
            this.container.html("");
            var handler = $("<a href='#' title='将系统的登录入口初始页面恢复为系统初始值'>恢复入口</a>");
            handler.click($.proxy(this.resetDefault, this));
            this.container.append(handler);
        },
        
        /**
         * 将当前页面类设置为系统首页。
         */
        setDefault : function(){
            this.setPreference(this.current, $.proxy(
                function(success){
                    if(("1" == success) && (!this.isDefault)){
                        this.createResetHandler();
                    }else{
                    }
                }, this));
            return false;
        },
        
        /**
         * 将系统首页重置为默认首页类。
         */
        resetDefault : function(){
            this.setPreference(this.globalDefaultPage, $.proxy(
                function(success){
                    if("1" == success){//设置成功
                        if(this.isDefault){
                            window.location = "/";
                        }else{
                            this.createSetHandler();
                        }
                    }else{//设置失败
                        
                    }
                }, this));
            return false;
        },
        
        /**
         * 设置用户的首选项。
         * @param {String} val 首选项的值。
         * @param {Function} func 设置以后的回调函数。
         */
        setPreference : function(val, func){
            $.post(this.service, { "key" : this.preferenceKey, "val" :　val },func);
        }
    };
    
    /**
     * 宽度类型。
     */
    var WidthType = {
        /**
         * 正常宽度。
         */
        "Normal" : 1,
        
        /**
         * 最小宽度。
         */
        "Minimum" :　2,
        
        /**
         * 最大宽度。
         */
        "Maximum" : 3
    };
    
    /**
     * 页面宽度控制器。
     * @param {String} page 页面主体元素的ID。
     * @param {String} container 控制器容器的ID。
     * @param {String} current 当前页面的宽度设置。
     */
    function WidthController(page, container, current){
        this.page = $("#" + page);
        this.container = $("#" + container);
        this.current = current;
        this.minWith = "760";
        this.maxWith = "100%";
        this.service = "/svr/setPreference.php";
        this.preferenceKey = "page_container_width";
        this.minimalHandler = this.maximalHandler = null;
        this.smallerHandler = this.biggerHandler = null;
        this.initialize();
    }
    WidthController.prototype = {
        /**
         * 初始化。
         */
        initialize : function(){
            this.page.width(this.current);
            this.minimalHandler = this.createHandler("760px", "将页面的宽度变为760px", this.changeMinimal);
            this.smallerHandler = this.createHandler("变窄", "将页面的宽度减少50px", this.changeSmaller);
            this.biggerHandler = this.createHandler("加宽", "将页面的宽度增加50px", this.changeBigger);
            this.maximalHandler = this.createHandler("100%", "将页面的宽度变为100%", this.changeMaximal);
            if((this.minWith + "px") == this.current){
                this.switchHandlerDisplay(WidthType.Minimum);
            }else if(this.maxWith == this.current){
                this.switchHandlerDisplay(WidthType.Maximum);
            }
        },
        
        /**
         * 变成最小的。
         */
        changeMinimal : function(){
            this.page.width(this.minWith);
            this.switchHandlerDisplay(WidthType.Minimum);
            this.setPreference(this.minWith + "px", function(){});
        },
        
        /**
         * 变成最大的。
         */
        changeMaximal : function(){
            this.page.width(this.maxWith);
            this.switchHandlerDisplay(WidthType.Maximum);
            this.setPreference(this.maxWith, function(){});
        },
        
        /**
         * 变成更小的。
         */
        changeSmaller : function(){
            var w = this.page.width() - 50,
                val = w + "px";
            if(w < this.minWith){
                w = this.minWith;
                val = w + "px";
                this.switchHandlerDisplay(WidthType.Minimum);
            }else{
                this.switchHandlerDisplay(WidthType.Normal);
            }
            this.page.width(w);
            this.setPreference(val, function(){});
        },
        
        /**
         * 变成更大的。
         */
        changeBigger : function(){
            var w = this.page.width() + 50,
                val = w + "px";
            if(w > $(document).width()){
                val = w = this.maxWith;
                this.switchHandlerDisplay(WidthType.Maximum);
            }else{
                this.switchHandlerDisplay(WidthType.Normal);
            }
            this.setPreference(val, function(){});
            this.page.width(w);
        },
        
        /**
         * 切换页面宽度控制钮的显示。
         * @param {WithType} type 页面宽度类型。
         */
        switchHandlerDisplay : function(type){
            this.minimalHandler.show();
            this.smallerHandler.show();
            this.maximalHandler.show();
            this.biggerHandler.show();
            switch(type){
                case WidthType.Minimum:
                    this.minimalHandler.hide();
                    this.smallerHandler.hide();
                    break;
                case WidthType.Maximum:
                    this.maximalHandler.hide();
                    this.biggerHandler.hide();
                    break;
                default:
            }
        },
        
        /**
         * 创建页面宽度控制钮。
         */
        createHandler : function(text, title, func){
            var handler = $("<a href='#' title='" + title + "'>" + text + "</a>");
            handler.click($.proxy(func, this));
            this.container.append(handler);
            return handler;
        },
        
        /**
         * 设置用户的首选项。
         * @param {String} val 首选项的值。
         * @param {Function} func 设置以后的回调函数。
         */
        setPreference : function(val, func){
            $.post(this.service, { "key" : this.preferenceKey, "val" :　val },func);
        }
    };
    
    /**
     * 页面操作类的命名空间。
     */
    $.yilab.pages = {
        /**
         * 系统默认首页设置和重置的控制器。
         * @param {String} container 控制器容器的ID。
         * @param {String} current 当前页面类的bean id。
         * @param {Boolean} isEntry 是否是系统默认的入口页面类。
         * @param {Boolean} isDefault 是否是网站首页。
         */
        defaultController : function(container, current, isEntry, isDefault){
            return new DefaultController(container, current, isEntry, isDefault);
        },
        
        /**
         * 页面宽度控制器。
         * @param {String} page 页面主体元素的ID。
         * @param {String} container 控制器容器的ID。
         * @param {String} current 当前页面的宽度设置。
         */
        widthController : function(page, container, current){
            return new WidthController(page, container, current);
        }
    };
})(jQuery);
